这段代码来自libHaru项目，这是个用于生成PDF文件的跨平台、开放源码的C语言库。代码展示了处理PDF文档中数字对象的几个函数。

1. **HPDF_Number_New**: 这个函数用于创建一个新的`HPDF_Number`对象。它接受两个参数：
   - `mmgr`: 是一个`HPDF_MMgr`类型的内存管理器，用于管理libHaru内部的内存分配。
   - `value`: 是一个`HPDF_INT32`类型的整数，用于初始化新创建的数字对象的值。

   函数首先使用`HPDF_GetMem`从`mmgr`中分配足够大的内存来存储`HPDF_Number_Rec`类型的对象。如果内存分配成功，则初始化对象的`header`成员，将其`obj_class`字段设为`HPDF_OCLASS_NUMBER`，表示这是一个数字对象，并设置`value`字段。最后，函数返回指向新创建的`HPDF_Number`对象的指针。

2. **HPDF_Number_Write**: 这个函数用于将`HPDF_Number`对象的内容写入到`HPDF_Stream`流中。它接受两个参数：
   - `obj`: 是要写入的`HPDF_Number`对象。
   - `stream`: 是目标`HPDF_Stream`流。

   函数调用`HPDF_Stream_WriteInt`，将`obj`的`value`字段写入到`stream`中，返回`HPDF_Stream_WriteInt`的返回状态。

3. **HPDF_Number_SetValue**: 这个函数用于更新`HPDF_Number`对象的值。它接受两个参数：
   - `obj`: 是要修改的`HPDF_Number`对象。
   - `value`: 是一个新的`HPDF_INT32`类型的整数值。

   函数简单地将`obj`的`value`字段更新为新的`value`。

这些函数共同提供了创建、修改和写入PDF文档中的数字对象的功能。数字对象在PDF文档中可以用于各种场景，比如作为字典中的键值、数组元素或是操作符的参数等。/*
 * << Haru Free PDF Library >> -- hpdf_number.c
 *
 * URL: http://libharu.org
 *
 * Copyright (c) 1999-2006 Takeshi Kanno <takeshi_kanno@est.hi-ho.ne.jp>
 * Copyright (c) 2007-2009 Antony Dovgal <tony@daylessday.org>
 *
 * Permission to use, copy, modify, distribute and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies and
 * that both that copyright notice and this permission notice appear
 * in supporting documentation.
 * It is provided "as is" without express or implied warranty.
 *
 */

#include "hpdf_utils.h"
#include "hpdf_objects.h"


HPDF_Number
HPDF_Number_New  (HPDF_MMgr   mmgr,
                  HPDF_INT32  value)
{
    HPDF_Number obj = HPDF_GetMem (mmgr, sizeof(HPDF_Number_Rec));

    if (obj) {
        HPDF_MemSet (&obj->header, 0, sizeof(HPDF_Obj_Header));
        obj->header.obj_class = HPDF_OCLASS_NUMBER;
        obj->value = value;
    }

    return obj;
}


HPDF_STATUS
HPDF_Number_Write  (HPDF_Number  obj,
                    HPDF_Stream  stream)
{
    return HPDF_Stream_WriteInt (stream, obj->value);
}


void
HPDF_Number_SetValue  (HPDF_Number  obj,
                       HPDF_INT32   value)
{
    obj->value =value;
}

